import axios from 'axios';
import store from '@/store';
import router from '@/router';
// import { getToken } from '@/utils/auth';
import * as code from '@/config/code';
import { Toast } from 'mint-ui';

const service = axios.create({
  timeout: 5000
});
service.defaults.withCredentials = true;
service.interceptors.request.use(request => {
  // if (store.getters.token) {
  //     request.headers['user-token'] = getToken();
  // }
  return request;
}, error => {
  Promise.reject(error);
});

service.interceptors.response.use(function (response) {
    // eslint-disable-next-line
    process.env.NODE_ENV === 'development' && console.log(response)
    return response
}, function (error) {
    // 返回错误处理
    // 超时处理
    if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
        Toast({
            message: '网络超时'
          });
        return error
    }

    // 其它错误处理
    switch (error.response.status) {
        case 401:
        Toast({
            message: '登录信息失效'
          });
            store.dispatch('LogOut')
            router.replace(`/${store.state.lang.language}/login`)
            return
        case 403:
        Toast({
            message: '禁止访问'
          });
            break
        case 404:
        Toast({
            message: '资源不存在'
          });
            break
        case 500:
        Toast({
            message: '网络错误'
          });
            break
        case 504:
        Toast({
            message: '网络超时'
          });
            break
        default:
            break
    }

    return Promise.reject(error)
})

export default function request (options) {
  return new Promise((resolve, reject) => {
    service(options)
      .then((res) => {
          /**
           *  else if (~code.NOT_LOGIN.indexOf(data.code)) {
                  // 重新登录
                }
           */
          if (~code.SUCCESS.indexOf(res.status)) {
          resolve(res.data);
        } else {
          // 在出口进行消息提示，而不用去处理每个子接口的消息提示和异常打印
          Toast({
            message: res.data.message
          });
          reject(res.data);
        }
      })
      .catch((error) => {
        Toast({
            message: error.message
          });
        reject(error);
      });
  });
}
